import Request from 'luch-request';

import {
	useUserStore,
} from '@/store/module/user.js';
// 实例化网络请求
const http = new Request({
	// 接口基地址
	// 接口基地址
	baseURL: 'https://consult-api.itheima.net',

	custom: {
		loading: true,
	},
});

// tabBar页面路径
const tabBarList = [
	'pages/index/index',
	'pages/wites/index',
	'pages/notify/index',
	'pages/my/index',
];

const whiteList = [
	'/code', '/login',
];
// 请求拦截器
http.interceptors.request.use(
	(config) => {
		// 定义头信息，并保证接口调用传递的头信息
		// 能够覆盖在拦截器定义的头信息
		uni.showLoading({
			title: '正在加载',
		});
		const userStore = useUserStore();

		const defaultHeader = {};

		if (userStore.token && !whiteList.includes(config.url)) {
			defaultHeader.Authorization = `Bearer ${userStore.token}`;
		}

		config.header = {
			// Authorization: '11111111',
			...defaultHeader,
			...config.header,
		};

		return config;
	},
	(error) => {
		return Promise.reject(error);
	}
);

// 响应拦截器
http.interceptors.response.use(
	({
		statusCode,
		data,
		config,
	}) => {
		// 解构出响应主体

		// 关闭提示
		uni.hideLoading();
		return data;
	},
	(error) => {
		// 关闭提示
		uni.hideLoading();
		if (error.statusCode === 401) {
			reLogin();
		}
		console.log(error);
		return Promise.reject(error);
	}
);

const reLogin = () => {
	// 动态读取当前页面的路径
	const pageStack = getCurrentPages();
	const currentPage = pageStack[pageStack.length - 1];
	// 完整的路由（包含地址中的参数）
	const redirectURL = currentPage.$page.fullPath;
	// 是否为 tabBar 中定义的路径
	const openType = tabBarList.includes(currentPage.route) ? 'switchTab' : 'redirectTo';
	// 用户相关数据
	const userStore = useUserStore();

	// 将来再跳转回这个页面
	userStore.redirectURL = redirectURL;
	// 页面（路由）跳转方式
	userStore.openType = openType;
	// 跳转到登录页面
	uni.redirectTo({
		url: '/pages/login/index',
	});
};
// 导出配置好的模网络模块
export {
	http
};
